package Servlets;

import EncuestasDAO.EncuestaDAO;
import EncuestasDAO.PreguntasDAO;
import EncuestasDTO.EncuestaDTO;
import EncuestasDTO.IncisoDTO;
import EncuestasDTO.PreguntaDTO;
import Estructuras.Principales.PrincipalEncuesta;
import Herramientas.RedireccionPOPUP;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Vector;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Alan Gonzalez
 */
@WebServlet(name = "Encuestas", urlPatterns = {"/Encuestas"})
public class Encuestas extends HttpServlet {

    /**
     * Processes requests for both HTTP
     * <code>GET</code> and
     * <code>POST</code> methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            HttpSession session = request.getSession();
            String Action = request.getParameter("action");
            Vector errores = new Vector();

            if (Action.equals("principal")) {
                errores.clear();
                PrincipalEncuesta principal = new PrincipalEncuesta();
                EncuestaDAO encuestaDAO = new EncuestaDAO();
                Vector encuestas = encuestaDAO.selccionarTodaEncuesta();
                principal.setEncuestas(encuestas);
                session.setAttribute("principalEncuesta", principal);
                response.sendRedirect("EncuestasJSP/main.jsp");

            } else if (Action.equals("nueva")) {
                EncuestaDTO encuesta = new EncuestaDTO();
                PrincipalEncuesta principal = new PrincipalEncuesta();
                int dia = Integer.parseInt(request.getParameter("diaFinEncuesta"));
                int mes = Integer.parseInt(request.getParameter("mesFinEncuesta"));
                int año = Integer.parseInt(request.getParameter("anioFinEncuesta"));

                if (request.getParameter("tituloEncuesta").length() > 0) {
                    encuesta.setTitulo(request.getParameter("tituloEncuesta"));
                } else {
                    errores.add("INGRESE UN TITULO PARA CREAR NUEVA ENCUESTA");
                }
                if (errores.size() == 0) {
                    errores.clear();
                    EncuestaDAO encuestaDAO = new EncuestaDAO();
                    encuesta.setFolio(Math.random());
                    encuestaDAO.nuevaEncuesta(encuesta);
                    Vector encuestas = encuestaDAO.selccionarTodaEncuesta();
                    principal.setEncuestas(encuestas);
                    session.setAttribute("principalEncuesta", principal);
                    response.sendRedirect("EncuestasJSP/main.jsp");
                } else if (errores.size() > 0) {
                    principal.setErrores(errores);
                    EncuestaDAO encuestaDAO = new EncuestaDAO();
                    Vector encuestas = encuestaDAO.selccionarTodaEncuesta();
                    principal.setEncuestas(encuestas);
                    session.setAttribute("principalEncuesta", principal);
                    response.sendRedirect("EncuestasJSP/main.jsp");
                }

            } else if (Action.equals("borrarEncuesta")) {
                PrincipalEncuesta principal = (PrincipalEncuesta) session.getAttribute("principalEncuesta");
                int idEncuesta = Integer.parseInt(request.getParameter("id"));
                EncuestaDAO encuesta = new EncuestaDAO();
                encuesta.borrarEncuesta(idEncuesta);
                Vector encuestas = encuesta.selccionarTodaEncuesta();
                principal.setEncuestas(encuestas);
                session.setAttribute("principalEncuesta", principal);
                response.sendRedirect("EncuestasJSP/main.jsp");

            } else if (Action.equals("AdminPreguntas")) {
                PrincipalEncuesta principal = (PrincipalEncuesta) session.getAttribute("principalEncuesta");
                PreguntasDAO preguntasDAO = new PreguntasDAO();
                Vector preguntas = preguntasDAO.seleccionarTodaPregunta();
                principal.setPreguntas(preguntas);
                session.setAttribute("principalEncuesta", principal);
                response.sendRedirect("EncuestasJSP/adminPreguntas.jsp");

            } else if (Action.equals("nuevaPregunta")) {
                errores.clear();
                int index = Integer.parseInt(request.getParameter("index"));

                switch (index) {
                    case 1: // presento el formulario en  porp up
                        PrincipalEncuesta principal = (PrincipalEncuesta) session.getAttribute("principalEncuesta");
                        PreguntaDTO preguntaDTO = new PreguntaDTO();
                        preguntaDTO.setBanderaUno(0);
                        principal.setPreguntaDTO(preguntaDTO);
                        session.setAttribute("principalEncuesta", principal);
                        response.sendRedirect("EncuestasJSP/nuevaPregunta.jsp");
                        break;
                    case 2:
                        PrincipalEncuesta principal2 = (PrincipalEncuesta) session.getAttribute("principalEncuesta");
                        PreguntaDTO preguntaDTO1 = (PreguntaDTO) principal2.getPreguntaDTO();
                        preguntaDTO1.setFolioPregunta(Math.random());
                        if (request.getParameter("pregunta").length() > 0) {
                            preguntaDTO1.setPregunta(request.getParameter("pregunta"));
                        } else {
                            errores.add("INGRESE UNA PREGUNTA");
                        }
                        int tipoPeregunta = Integer.parseInt(request.getParameter("tipoPregunta"));
                        preguntaDTO1.setTipoPregunta(tipoPeregunta);
                        if (tipoPeregunta == 1) {
                            // se envia a revision de la pregunta abierta
                            preguntaDTO1.setBanderaUno(5);
                        } else if (tipoPeregunta == 2) {
                            preguntaDTO1.setBanderaUno(2);
                        }
                        principal2.setPreguntaDTO(preguntaDTO1);
                        session.setAttribute("principalEncuesta", principal2);
                        response.sendRedirect("EncuestasJSP/nuevaPregunta.jsp");
                        break;
                    case 3:
                        errores.clear();
                        int numeroRespuestasPosibles = Integer.parseInt(request.getParameter("respPosibles"));
                        PrincipalEncuesta principal3 = (PrincipalEncuesta) session.getAttribute("principalEncuesta");
                        PreguntaDTO preguntaDTO2 = (PreguntaDTO) principal3.getPreguntaDTO();
                        // creando el vector de incisos
                        int aux = 0;
                        Vector respuestas = new Vector();
                        Vector opts = new Vector();
                        opts.add("A");
                        opts.add("B");
                        opts.add("C");
                        opts.add("D");
                        opts.add("E");
                        opts.add("F");
                        for (aux = 0; aux < numeroRespuestasPosibles; aux++) 
                        {
                            IncisoDTO inciso = new IncisoDTO();
                            inciso.setIncisoLibre(opts.elementAt(aux).toString());
                            inciso.setInciso(opts.elementAt(aux).toString() + ")");
                            inciso.setNobreControl(opts.elementAt(aux).toString() + "_" + preguntaDTO2.getFolioPregunta());
                            respuestas.add(inciso);
                        }
                        preguntaDTO2.setOpciones(respuestas);
                        preguntaDTO2.setBanderaUno(3);
                        preguntaDTO2.setRespuestaPosibles(numeroRespuestasPosibles);
                        principal3.setPreguntaDTO(preguntaDTO2);
                        session.setAttribute("principalEncuesta", principal3);
                        response.sendRedirect("EncuestasJSP/nuevaPregunta.jsp");
                        break;
                    case 4:
                        errores.clear();
                        PrincipalEncuesta principal4 = (PrincipalEncuesta) session.getAttribute("principalEncuesta");
                        principal4.setErrores(errores);
                        PreguntaDTO preguntaDTO3 = (PreguntaDTO) principal4.getPreguntaDTO();
                        int aux2 = 0;
                        Vector opciones = preguntaDTO3.getOpciones();
                        for (aux2 = 0; aux2 < opciones.size(); aux2++) {
                            IncisoDTO inciso = (IncisoDTO) opciones.elementAt(aux2);
                            if (request.getParameter(inciso.getNobreControl().toString()).length() > 0) {
                                inciso.setRespuesta(request.getParameter(inciso.getNobreControl().toString()));
                            } else {
                                errores.add("Ingrese una Respuesta Posible para el Inciso: " + inciso.getInciso().toString());
                            }
                        }
                        preguntaDTO3.setRespuesaCorrecta(request.getParameter("incisoCorrecto"));
                        if (errores.size() == 0) {
                            errores.clear();
                            preguntaDTO3.setBanderaUno(4);
                            session.setAttribute("principalEncuesta", principal4);
                            response.sendRedirect("EncuestasJSP/nuevaPregunta.jsp");
                        } else if (errores.size() > 0) {
                            principal4.setErrores(errores);
                            session.setAttribute("principalEncuesta", principal4);
                            response.sendRedirect("EncuestasJSP/nuevaPregunta.jsp");
                        }
                        break;
                    case 5:
                        PrincipalEncuesta principalEncuestaFinal = (PrincipalEncuesta) session.getAttribute("principalEncuesta");
                        PreguntaDTO preguntaReg = (PreguntaDTO) principalEncuestaFinal.getPreguntaDTO();
                        PreguntasDAO preguntasDAO = new PreguntasDAO();
                        preguntasDAO.nuevaPreunta(preguntaReg);
                        RedireccionPOPUP redireccion = new RedireccionPOPUP();
                        redireccion.setServicio("./Encuestas?action=AdminPreguntas");
                        session.setAttribute("sistema", redireccion);
                        response.sendRedirect("loading.jsp");
                        break;
                    case 6:
                        // pregunta abierta
                        PrincipalEncuesta principalPreguntaAbierta = (PrincipalEncuesta) session.getAttribute("principalEncuesta");
                        PreguntaDTO preguntaAbiertaReg = (PreguntaDTO) principalPreguntaAbierta.getPreguntaDTO();
                        preguntaAbiertaReg.setRespuestaPosibles(1);
                        PreguntasDAO preguntasDAO2 = new PreguntasDAO();
                        preguntasDAO2.nuevaPreunta(preguntaAbiertaReg);
                        RedireccionPOPUP redireccion2 = new RedireccionPOPUP();
                        redireccion2.setServicio("./Encuestas?action=AdminPreguntas");
                        session.setAttribute("sistema", redireccion2);
                        response.sendRedirect("loading.jsp");
                        break;
                }

            } else if (Action.equals("borrarPregunta")) {
                int id = Integer.parseInt(request.getParameter("id"));
                PreguntasDAO preguntasDAO = new PreguntasDAO();
                preguntasDAO.borrarPregunta(id);
                response.sendRedirect("./Encuestas?action=AdminPreguntas");

            } else if (Action.equals("asignacionPregunta")) {
                double folioPregunta = Double.parseDouble(request.getParameter("folioPregunta"));
                PrincipalEncuesta principal = (PrincipalEncuesta) session.getAttribute("principalEncuesta");
                principal.setFolioPreguntaApuntador(folioPregunta);
                EncuestaDAO encuestasDAO = new EncuestaDAO();
                PreguntasDAO preguntasDAO = new PreguntasDAO();
                Vector encuestas = encuestasDAO.selccionarTodaEncuesta();
                
                 // -> MOTOR DE VERIFICACION DE CHECKS EN LA INTERFAZ <-
                
                int aux = 0;
                for (aux = 0; aux < encuestas.size(); aux++) {
                    EncuestaDTO encuesta = (EncuestaDTO) encuestas.elementAt(aux);
                    // busquda folio_encuesta --> folio pregunta
                   double folioEncuesta = encuesta.getFolio();
                   // 1.- existe la asignacion 2.- no exite la asignacion
                   int flagAsignacion = preguntasDAO.buscarAsignacion(folioPregunta, folioEncuesta);
                   encuesta.setPreguntaEncuesta(flagAsignacion);
                }
                 // -> MOTOR DE VERIFICACION DE CHECKS EN LA INTERFAZ <-

                principal.setEncuestas(encuestas);
                session.setAttribute("principalEncuestas", principal);
                response.sendRedirect("EncuestasJSP/asignaciones.jsp");

            } else if (Action.equals("realizarAsigancion")) {
                PrincipalEncuesta principal = (PrincipalEncuesta) session.getAttribute("principalEncuesta");
                Vector encuestas = principal.getEncuestas();
                PreguntasDAO preguntas = new PreguntasDAO();
                double idPregunta = principal.getFolioPreguntaApuntador();
                int cont = 0;
                for (cont = 0; cont < encuestas.size(); cont++) {
                    EncuestaDTO encuesta = (EncuestaDTO) encuestas.elementAt(cont);
                    if (request.getParameter("" + encuesta.getFolio()) != null) {
                        int estadoCheck = 1;
                        preguntas.asignacion(estadoCheck, idPregunta, encuesta);
                    } else if (request.getParameter("" + encuesta.getFolio()) == null) {
                        int estadoCheck = 2;
                        preguntas.asignacion(estadoCheck, idPregunta, encuesta);
                    }
                }
                RedireccionPOPUP redireccion = new RedireccionPOPUP();
                redireccion.setServicio("./Encuestas?action=AdminPreguntas");
                session.setAttribute("sistema", redireccion);
                response.sendRedirect("loading.jsp");
            }
        } finally {
            out.close();
        }
    }
    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">

    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
